package com.kaigejava.sortingalgorithm.selectsorting;

import java.util.Arrays;

/**
 * 选择排序
 * 思路：
 * 第一次从arr[0]~arr[n-1]中选择最小的与arr[0]交换；
 * 第二次从arr[1]~arr[n-1]中选择最小的与arr[1]交易换
 * 以此类推
 */
public class SelectSortingDemo {

    public static void main(String[] args) {
        int [] arr  = {101,34,119,1,-1,90,123};
        System.out.println("排序前:"+ Arrays.toString(args));
        selectSortingFunction(arr);
        System.out.println("排序后:"+ Arrays.toString(args));

    }


    /**
     * 选择排序
     * 从第一个和后面的一个一个比较的
     * @param arr
     */
    private static void selectSortingFunction(int[] arr) {
        if(null == arr || arr.length<2){
            return;
        }
        //外循环是ar[0] 外循环就是[arr-1]
        for (int i = 0; i < arr.length-1 ; i++) {
            int minIndex = i;
            int min = arr[i];
            for (int j = 0; j < arr.length; j++) {
                if(min > arr[j]){
                    //当前最小值大于了后面比较的。进行交换
                    //交换值
                    min = arr[j];
                    //交换下标
                    minIndex = j;
                }
            }

            if(minIndex != i){
                //最小值的下标不等于i了。说明交换过
                //交换数据。此时 minIndex=j了。也就是那j的值和i的值进行互换
                arr[minIndex] = arr[i];
                //此时的min已经等于arr[j]了
                arr[i] = min;
            }

        }
    }
}
